import { defineStore } from 'pinia'
import { ref, computed } from 'vue'
import { authApi } from '../api/auth'

export const useUserStore = defineStore('user', () => {
    const token = ref('')
    const userInfo = ref(null)

    // 计算属性：检查是否已登录
    const isLoggedIn = computed(() => {
        return !!token.value
    })

    // 计算属性：从token中解析用户ID
    const userId = computed(() => {
        if (!token.value) return null
        try {
            const payload = JSON.parse(atob(token.value.split('.')[1]))
            return payload.userId
        } catch (error) {
            console.error('Token解析失败:', error)
            return null
        }
    })

    // 计算属性：从token中解析用户名
    const username = computed(() => {
        if (!token.value) return null
        try {
            const payload = JSON.parse(atob(token.value.split('.')[1]))
            return payload.name
        } catch (error) {
            console.error('Token解析失败:', error)
            return null
        }
    })

    // 计算属性：从token中解析用户角色
    const userRoles = computed(() => {
        if (!token.value) return []
        try {
            const payload = JSON.parse(atob(token.value.split('.')[1]))
            return payload.role || []
        } catch (error) {
            console.error('Token解析失败:', error)
            return []
        }
    })

    // 检查token是否过期
    const isTokenExpired = computed(() => {
        if (!token.value) return true
        try {
            const payload = JSON.parse(atob(token.value.split('.')[1]))
            const exp = payload.exp * 1000 // 转换为毫秒
            return Date.now() >= exp
        } catch (error) {
            console.error('Token解析失败:', error)
            return true
        }
    })

    // 检查用户是否有指定角色
    const hasRole = (role) => {
        return userRoles.value.includes(role)
    }

    // 检查用户是否有指定权限（这里可以根据你的权限系统扩展）
    const hasPermission = () => {
        // 这里可以根据你的权限系统实现具体的权限检查逻辑
        return userRoles.value.length > 0 // 简单示例：有角色就有权限
    }

    function setToken(newToken) {
        token.value = newToken
    }

    function setUserInfo(info) {
        userInfo.value = info
    }

    // 获取用户详细信息
    async function fetchUserInfo() {
        if (!userId.value) return null

        try {
            const response = await authApi.getUserInfo(userId.value)
            if (response.data.code === 1000) {
                userInfo.value = response.data.data
                return response.data.data
            }
        } catch (error) {
            console.error('获取用户信息失败:', error)
        }
        return null
    }

    function logout() {
        token.value = ''
        userInfo.value = null
    }

    return {
        token,
        userInfo,
        isLoggedIn,
        userId,
        username,
        userRoles,
        isTokenExpired,
        hasRole,
        hasPermission,
        setToken,
        setUserInfo,
        fetchUserInfo,
        logout
    }
}, {
    persist: {
        // 只持久化token，不持久化userInfo（因为userInfo可能会过期）
        paths: ['token']
    }
}) 